package main

import (
	"fmt"
	"sort"
)

/*
	前 K 个高频元素
给你一个整数数组 nums 和一个整数 k ，请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。


示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:
输入: nums = [1], k = 1
输出: [1] */

func topFrequent(nums []int, k int) []int {
	set := make([]int, 0)    // 保存不重复的值
	m := make(map[int]int)   // 一次遍历，统计次数

	for _, v := range nums {
		if _, ok := m[v]; ok {   // 存在
			m[v] += 1
		}else {
			m[v] = 1
			set = append(set, v)
		}
	}
	//fmt.Println(set)
	//fmt.Println(m)

	sort.Slice(set, func(i, j int) bool {
		//fmt.Println(i, j)
		return m[set[i]] > m[set[j]]
	})
	return set[:k]
}

func main()  {
	fmt.Println(topFrequent([]int{1,1,1,2,2,3}, 2))
}